package fiuba.algo3.gpschallenge.gui;

import java.awt.BorderLayout;
import java.awt.Dimension;

import javax.swing.AbstractButton;
import javax.swing.ButtonGroup;
import javax.swing.JPanel;

import fiuba.algo3.gpschallenge.Controlador.Controlador;
import fiuba.algo3.gpschallenge.modelo.Juego;
import fiuba.algo3.gpschallenge.modelo.dificultad.Dificultad;
import fiuba.algo3.gpschallenge.modelo.dificultad.NivelDificil;
import fiuba.algo3.gpschallenge.modelo.dificultad.NivelFacil;
import fiuba.algo3.gpschallenge.modelo.dificultad.NivelModerado;
import fiuba.algo3.gpschallenge.modelo.vehiculos.Automovil;
import fiuba.algo3.gpschallenge.modelo.vehiculos.Camioneta;
import fiuba.algo3.gpschallenge.modelo.vehiculos.Moto;
import fiuba.algo3.gpschallenge.modelo.vehiculos.Vehiculo;

import javax.swing.JRadioButton;

import java.awt.Font;

import javax.swing.SwingConstants;

import java.awt.Color;

import javax.swing.JButton;

import java.awt.SystemColor;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.Enumeration;

public class PanelJuegoNuevo extends JPanel {
	
	private Agregable interfazAgregable;
	private Controlador control;
	private Juego modelo;
	private final int ALTO = 350;
	private final int ANCHO = 700;
	private ButtonGroup casillasDificultad;
	private ButtonGroup casillasVehiculos;
	
	public PanelJuegoNuevo(Agregable interfazM, Juego modelo, Controlador control) {
		setBackground(Color.WHITE);
		
		interfazAgregable = interfazM;
		this.modelo = modelo;
		this.control = control;
		setPreferredSize(new Dimension(ANCHO, ALTO));
		setLayout(null);
		
		casillasDificultad = new ButtonGroup();
		casillasVehiculos = new ButtonGroup();
		
		JRadioButton rdbtnFacil = new JRadioButton("F\u00E1cil");
		rdbtnFacil.setBackground(Color.WHITE);
		rdbtnFacil.setFont(new Font("Arial Black", Font.BOLD, 18));
		rdbtnFacil.setBounds(134, 101, 168, 41);
		add(rdbtnFacil);
		rdbtnFacil.addItemListener(new ItemListener(){
			public void itemStateChanged(ItemEvent e) {
				setearDificultad(new NivelFacil());
			}
		});
		
		JRadioButton rdbtnModerado = new JRadioButton("Moderado");
		rdbtnModerado.setBackground(Color.WHITE);
		rdbtnModerado.setFont(new Font("Arial Black", Font.BOLD, 18));
		rdbtnModerado.setBounds(134, 161, 168, 41);
		add(rdbtnModerado);
		rdbtnModerado.addItemListener(new ItemListener(){
			public void itemStateChanged(ItemEvent e) {
				setearDificultad(new NivelModerado());
			}
		});
		
		JRadioButton rdbtnDificil = new JRadioButton("Dificil");
		rdbtnDificil.setBackground(Color.WHITE);
		rdbtnDificil.setFont(new Font("Arial Black", Font.BOLD, 18));
		rdbtnDificil.setBounds(134, 221, 168, 41);
		add(rdbtnDificil);
		rdbtnDificil.addItemListener(new ItemListener(){
			public void itemStateChanged(ItemEvent e) {
				setearDificultad(new NivelDificil());
			}
		});
		
		casillasDificultad.add (rdbtnFacil);
		casillasDificultad.add (rdbtnModerado);
		casillasDificultad.add (rdbtnDificil);
		
		JRadioButton rdbtnAuto = new JRadioButton("Auto");
		rdbtnAuto.setBackground(Color.WHITE);
		rdbtnAuto.setFont(new Font("Arial Black", Font.BOLD, 18));
		rdbtnAuto.setBounds(402, 101, 168, 41);
		add(rdbtnAuto);
		rdbtnAuto.addItemListener(new ItemListener(){
			public void itemStateChanged(ItemEvent e) {
				setearVehiculo(new Automovil());
			}
		});
		
		JRadioButton rdbtn4x4 = new JRadioButton("4 x 4");
		rdbtn4x4.setBackground(Color.WHITE);
		rdbtn4x4.setFont(new Font("Arial Black", Font.BOLD, 18));
		rdbtn4x4.setBounds(402, 161, 168, 41);
		add(rdbtn4x4);
		rdbtn4x4.addItemListener(new ItemListener(){
			public void itemStateChanged(ItemEvent e) {
				setearVehiculo(new Camioneta());
			}
		});
		
		JRadioButton rdbtnMoto = new JRadioButton("Moto");
		rdbtnMoto.setBackground(Color.WHITE);
		rdbtnMoto.setFont(new Font("Arial Black", Font.BOLD, 18));
		rdbtnMoto.setBounds(402, 221, 168, 41);
		add(rdbtnMoto);
		rdbtnMoto.addItemListener(new ItemListener(){
			public void itemStateChanged(ItemEvent e) {
				setearVehiculo(new Moto());
			}
		});
		
		casillasVehiculos.add (rdbtnAuto);
		casillasVehiculos.add (rdbtn4x4);
		casillasVehiculos.add (rdbtnMoto);
		
		JButton botonJugar = new JButton("Jugar");
		botonJugar.setBackground(SystemColor.activeCaption);
		botonJugar.setForeground(SystemColor.inactiveCaptionBorder);
		botonJugar.setFont(new Font("Arial Black", Font.BOLD, 12));
		botonJugar.setBounds(260, 280, 114, 33);
		add(botonJugar);
		botonJugar.addActionListener(new botonJugarListener());
		
	}	
	
	private void setearDificultad(Dificultad dificultad){
		modelo.setDificultad(dificultad);
		modelo.getpuntosDeJugador().setDificultad(dificultad);
	}
	
	private void setearVehiculo (Vehiculo vehiculo){
		modelo.getJugador().setVehiculo(vehiculo);
	}
	
	private void cargarPanelDelJuego() {
		interfazAgregable.limpiarVentana();		
		PanelDelJuego panelDelJuego = new PanelDelJuego(this.interfazAgregable, this.modelo, this.control);
		PanelSuperiorJuego panelSuperiorJuego = new PanelSuperiorJuego(this.interfazAgregable, this.modelo, this.control);	
		interfazAgregable.agregarComponente(panelSuperiorJuego, BorderLayout.NORTH);
		interfazAgregable.agregarComponente(panelDelJuego, BorderLayout.CENTER);
	}
	
	class botonJugarListener implements ActionListener {
		@Override
		public void actionPerformed (ActionEvent e){
			cargarPanelDelJuego();
		}
	}
}
